home *** CD-ROM | disk | FTP | other *** search
/ Apple II Magazines (PO) / Nibble Volume 09, No. 08 (1988-08)(MicroSPARC)(Side A).zip / Nibble Volume 09, No. 08 (1988-08)(MicroSPARC)(Side A).po / INST.DATE.TIM.S < prev    next >
Text File  |  1996-12-24  |  5KB  |  167 lines

  1. *
  2. * INST.DATE.TIME Source Code
  3. * By Royce Bacon
  4. * Copyright(c) 1988
  5. * MicroSPARC, Inc.
  6. * Concord, MA 01742
  7. *
  8. HIMEM     EQU $73        ;HIMEM LOCATION
  9. BITMAP    EQU $BF58      ;SYSTEM BIT MAP
  10. EXTRNCMD  EQU $BE06      ;EXTERNAL COMMAND VECTOR
  11. DOSCMD    EQU $BE03      ;EXECUTE DOS COMMAND
  12. ERROUT    EQU $BE09
  13. ERRCODE   EQU $BE0F      ;DOS ERROR CODE
  14. PRINTERR  EQU $BE0C      ;PRINT DOS ERROR MSG 
  15. BUFIN     EQU $200       ;INPUT BUFER AREA
  16. SVADDR    EQU 6          ;ADDR SAVE AREA
  17. COUT      EQU $FDED      ;OUTPUT A CHAR
  18. RETURN    EQU $8D        ;CARRIAGE RETURN
  19.           MSB ON
  20.           ORG $2000
  21. * SET HIMEM DOWN BY 256
  22. START     DEC HIMEM+1    ;SUBTRACT 256 FROM HIMEM
  23.           DEC HIMEM+1    ;ANOTHER 256 FOR 512 TOTAL
  24.           LDX HIMEM+1
  25.           INX            ;ADD 1K TO HIMEM
  26.           INX            ;FOR BLOAD ADDR 
  27.           INX
  28.           INX
  29.           TXA            ;GET HIMEM+1K
  30.           PHA            ;SAVE HIMEM+1K
  31. * MOVE BLOAD COMMAND TO BUFFER
  32.           LDY #0
  33. MVLOOP    LDA CMD,Y      ;GET BYTE OF COMMAND
  34.           BEQ MVDONE     ;END OF COMMAND
  35.           STA BUFIN,Y    ;MOVE TO BUFFER
  36.           INY            ;NEXT CHAR
  37.           BNE MVLOOP     ;DO ALL CHARS
  38. * ADD HEX ADDR TO BLOAD COMMAND
  39. MVDONE    PLA            ;GET HIMEM+1K
  40.           PHA            ;SAVE IT AGAIN
  41.           STA SVADDR+1 
  42.           JSR CVBYTE     ;CONVERT TO HEX
  43.           LDA HIMEM      ;NOW LOW BYTE
  44.           STA SVADDR 
  45.           JSR CVBYTE
  46.           LDA #RETURN 
  47.           STA BUFIN,Y    ;AT END OF COMMAND
  48.           JSR DOSCMD     ;LOAD THE PROGRAM
  49.           BCS LOADERR BRANCH IF ERROR
  50.           BNE LOADERR    ;ERROR ON LOAD
  51.           PLA            ;GET HIMEM+1K AGAIN
  52.           TAX            ;SAVE FOR LATER
  53. * GET BIT IN SYSTEM BIT MAP
  54. * AND SET SYSTEM BIT MAP TO PROTECT DATE.TIME
  55.           LSR A          ;MOVE BYTE NUMBER
  56.           LSR A          ;   TO THE
  57.           LSR A          ;      RIGHT
  58.           TAY            ;SAVE THE BYTE NUMBER
  59.           TXA            ;GET BIT IN BYTE
  60.           AND #$07       ;MASK OFF BYTE NUM
  61.           TAX            ;SAVE BIT IN BYTE
  62.           LDA #$80       ;BIT 7 SET FOR BIT 0 IN BYTE
  63. LOOP      DEX            ;DONE SHIFTING?
  64.           BMI SETBIT     ;YES, SET BIT
  65.           LSR A          ;ELSE SHIFT AGAIN
  66.           JMP LOOP
  67. SETBIT    ORA BITMAP,Y   ;SET SELECTED BIT
  68.           STA BITMAP,Y   ;UPDATE SYSTEM BIT MAP
  69.           LSR A          ;SHIFT ONCE MORE
  70.           BNE SETBIT2    ;SET NEXT BIT IF OK
  71.           INY            ;NEXT BYTE IN BITMAP
  72.           LDA #$80       ;BIT 7 SET
  73. SETBIT2   ORA BITMAP,Y   ;SET SELECTED BIT
  74.           STA BITMAP,Y   ;UPDATE SYSTEM BIT MAP
  75. * GET CURRENT EXTRNCMD VECTOR AND MOVE TO NEW COMMAND
  76.           LDA EXTRNCMD+1 ;GET LOW BYTE
  77.           LDY #1
  78.           STA (SVADDR),Y ;PUT IN NEW PROG 
  79.           LDA EXTRNCMD+2 ;GET HIGH BYTE
  80.           INY
  81.           STA (SVADDR),Y ;PUT IN NEW PROG
  82. * SET EXTRNCMD VECTOR TO DATE.TIME PROGRAM
  83.           INC SVADDR     ;BYPASS THE 
  84.           INC SVADDR     ;JMP TO THE OLD
  85.           INC SVADDR     ;EXTRNCMD VECTOR
  86.           LDA SVADDR     ;GET ADDR OF NEW PROG
  87.           STA EXTRNCMD+1 ;AND PUT IN EXTERNAL
  88.           LDA SVADDR+1   ;COMMAND VECTOR
  89.           STA EXTRNCMD+2
  90. *
  91. * PRINT INSTRUCTIONS
  92. *
  93.           LDA #>MSG      ;SET PTR TO MSG
  94.           STA SVADDR
  95.           LDA #<MSG
  96.           STA SVADDR+1
  97.           LDY #0
  98. MSGLOOP   LDA (SVADDR),Y ;GET CHAR OF MSG
  99.           BEQ EXIT       ;END OF MSG
  100.           JSR COUT       ;PRINT THE CHAR
  101.           INY            ;NEXT CHAR OF MSG
  102.           BNE MSGLOOP
  103. EXIT      LDA #'B'       ;PUT BELL CMD 
  104.           STA BUFIN      ;IN BUFFER
  105.           LDA #'E' 
  106.           STA BUFIN+1
  107.           LDA #'L' 
  108.           STA BUFIN+2
  109.           STA BUFIN+3
  110.           LDA #RETURN    ;END WITH RETURN
  111.           STA BUFIN+4
  112.           JSR DOSCMD     ;SOUND THE PRODOS BELL
  113.           LDA #1
  114.           STA $BF90 
  115.           LDA #$B1
  116.           STA $BF91 INITIALIZE DATE
  117.           RTS            ;EXIT
  118. *
  119. * ERROR ON BLOAD OF PROGRAM
  120. *
  121. LOADERR   JSR PRINTERR   ;PRINT DOS ERROR MSG
  122.           PLA  FIX STACK
  123.           JMP $3D0 EXIT TO BASIC
  124. *
  125. * CONVERT A BYTE TO HEX
  126. *
  127. CVBYTE    PHA            ;SAVE CHAR
  128.           LSR A          ;GET HIGH ORDER
  129.           LSR A          ;    DIGIT
  130.           LSR A
  131.           LSR A
  132.           JSR CVHEX      ;CONVERT TO HEX
  133.           PLA            ;RESTORE CHAR
  134.           AND #$0F       ;GET LOW ORDER DIGIT
  135.           JSR CVHEX      ;CONVERT TO HEX
  136.           RTS            ;EXIT
  137. * CONVERT ACCUM TO HEX DIGIT
  138. CVHEX     ORA #$B0       ;MAKE A DIGIT
  139.           CMP #$BA       ;A-F?
  140.           BCC SVIT       ;NO - IS DIGIT
  141.           ADC #$06       ;YES - CONVERT TO CHAR A-F
  142. SVIT      STA BUFIN,Y    ;SAVE HEX DIGIT
  143.           INY            ;NEXT CHAR OF BUFFER
  144.           RTS            ;EXIT
  145. *
  146. * ASC STRING FOR BLOAD COMMAND
  147. *
  148. CMD       ASC 'BLOAD DATE.TIME,A$'
  149.           DFB 0          ;END OF COMMAND STRING
  150. *
  151. * INSTRUCTIONS
  152. *
  153. MSG       ASC "DATE.TIME INSTALLED"
  154.           DFB RETURN
  155.           DFB RETURN
  156.           ASC "COMMAND FORMATS ARE:"
  157.           DFB RETURN
  158.           ASC "DATE (PRINT CURRENT DATE)"
  159.           DFB RETURN
  160.           ASC "TIME (PRINT CURRENT TIME)"
  161.           DFB RETURN
  162.           ASC "TIME THH:MM (SET TIME TO HH:MM)"
  163.           DFB RETURN
  164.           ASC "BELL (SOUND THE PRODOS BELL)"
  165.           DFB RETURN
  166.           DFB 0          ;END OF MSG
  167.